package com.itheima.d7_thread_communication;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.Lock;

public class Desk {
    private List<String> food = new ArrayList<>();
//锁对象

    //生 产包子
    public synchronized void put() {
        //获取当前线程的名字
        String name = Thread.currentThread().getName();
        try {
            if (food.size() == 0) {
                //生产包子

                food.add(name + "做的肉包子");
                System.out.println(name + "做的肉包子");
                Thread.sleep(1500); //为了实现运行时停顿的效果

            } else {
                //通知消费者吃包子 自己等待
                this.notifyAll();//先唤醒  通知消费者
                this.wait();//在自己等待
                /*
                线程通信的规则：
                只有绑定在同一个对象锁上的线程，才能被其他线程唤醒
                 */
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


    }

    //消费包子
    public synchronized void eat() {

        String name = Thread.currentThread().getName();
        try {
            if (food.size()>=1){
                //有包子消费
                System.out.println(name+"eat"+food.get(0));
                food.clear();//清空集合
                Thread.sleep(15); //为了实现运行时停顿的效果
    //
                this.notifyAll();;
                this.wait();//释放锁对象
            }else {
                this.notifyAll();
                this.wait();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


    }

}
